package com.summer.springboot.ex.std.util;

import com.summer.springboot.ex.std.enums.CustomExceptionType;
import com.summer.springboot.ex.std.exception.CustomException;
import lombok.Data;

/**
 * 接口数据请求统一响应数据结构
 */
@Data
public class JsonResult {
    private boolean isok;  //请求是否处理成功
    private int code; //请求响应状态码
    private String message;  //请求结果描述信息
    private Object data; //请求结果数据（通常用于查询操作）

    private JsonResult(){}

    //请求出现异常时的响应数据封装
    public static JsonResult error(CustomException e) {
        JsonResult resultBean = new JsonResult();
        resultBean.setIsok(false);
        resultBean.setCode(e.getCode());
        resultBean.setMessage(e.getMessage());
        return resultBean;
    }

    //请求出现异常时的响应数据封装
    public static JsonResult error(CustomExceptionType customExceptionType,
                                   String errorMessage) {
        JsonResult resultBean = new JsonResult();
        resultBean.setIsok(false);
        resultBean.setCode(customExceptionType.getCode());
        resultBean.setMessage(errorMessage);
        return resultBean;
    }

    //请求成功的响应，不带查询数据（用于删除、修改、新增接口）
    public static JsonResult success(){
        JsonResult resultBean = new JsonResult();
        resultBean.setIsok(true);
        resultBean.setCode(200);
        resultBean.setMessage("请求响应成功!");
        return resultBean;
    }

    //请求成功的响应，带有查询数据（用于数据查询接口）
    public static JsonResult success(Object obj){
        JsonResult resultBean = new JsonResult();
        resultBean.setIsok(true);
        resultBean.setCode(200);
        resultBean.setMessage("请求响应成功!");
        resultBean.setData(obj);
        return resultBean;
    }

    //请求成功的响应，带有查询数据（用于数据查询接口）
    public static JsonResult success(Object obj,String message){
        JsonResult resultBean = new JsonResult();
        resultBean.setIsok(true);
        resultBean.setCode(200);
        resultBean.setMessage(message);
        resultBean.setData(obj);
        return resultBean;
    }
}
